const _ = require('lodash');
const g = require('gulp');
const s = require('gulp-sync')(g).sync;
const $ = require('gulp-load-plugins')();
const u = require('./dev/gulp.util');
const cfg = require('./dev/config');

['base', 'test', 'zip'].forEach(file => {
    require(`./dev/gulp.${file}`);
});

// 开发用默认任务
g.task('default', [
    'copy.libs',
    'copy.etc', 'copy.res',
    'debug', 'watch',
    'webpack.debug'
]);

// 拆分打包后台编译
g.task('pub.app.build', ['copy', 'build']);

// 拆分打包前端
g.task('pub.web', s(['webpack', 'pub.web.zip']));

// 统一打包编译
g.task('pub.build', s(['webpack', 'copy', 'build']));

function pub(cmd) {
    cmd = `npm i --production && ${cmd}`;
    const args = u.getArgs();
    if (_.includes(args, '-a')) {
        cmd += ' -a';
    }
    return $.run(cmd, {
        cwd: cfg.distDir
    }).exec();
}

// 统一打包
g.task('pub', ['pub.copy'], () => pub(
    'gulp pub.build && gulp pub.zip'
));

// 拆分打包后台
g.task('pub.app', ['pub.copy'], () => pub(
    'gulp pub.app.build && gulp pub.app.zip'
));

// 拆分打包
g.task('pub.all', ['pub.app', 'pub.web']);

// 发布运行
g.task('run', ['check', 'copy', 'build', 'webpack']);
